mir: don't crash when querying infos for an invalid monitor
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Thu, 13 Nov 2014 01:07:46 +0000 (02:07 +0100)
committerMarco Trevisan (Treviño) <mail@3v1n0.net>
Thu, 13 Nov 2014 01:07:46 +0000 (02:07 +0100)
gdk/mir/gdkmirscreen.c

index 9d6d82fc23f03010a3d77fd8e558182dbc5cfffe..6911c0611b893ee6a4711d130a988aca617a8fa8 100644 (file)
@@ -302,7 +302,8 @@ gdk_mir_screen_get_monitor_width_mm (GdkScreen *screen,
                                      gint       monitor_num)
 {
   g_printerr ("gdk_mir_screen_get_monitor_width_mm (%d)\n", monitor_num);
-  return get_output (screen, monitor_num)->physical_width_mm;
+  MirDisplayOutput *output = get_output (screen, monitor_num);
+  return output ? output->physical_width_mm : 0;
 }
 
 static gint
@@ -310,7 +311,8 @@ gdk_mir_screen_get_monitor_height_mm (GdkScreen *screen,
                                       gint       monitor_num)
 {
   g_printerr ("gdk_mir_screen_get_monitor_height_mm (%d)\n", monitor_num);
-  return get_output (screen, monitor_num)->physical_height_mm;
+  MirDisplayOutput *output = get_output (screen, monitor_num);
+  return output ? output->physical_height_mm : 0;
 }
 
 static gchar *
@@ -331,11 +333,19 @@ gdk_mir_screen_get_monitor_geometry (GdkScreen    *screen,
   MirDisplayMode *mode;
 
   output = get_output (screen, monitor_num);
-  mode = &output->modes[output->current_mode];
-  dest->x = output->position_x;
-  dest->y = output->position_y;
-  dest->width = mode->horizontal_resolution;
-  dest->height = mode->vertical_resolution;
+
+  if (output)
+    {
+      mode = &output->modes[output->current_mode];
+      dest->x = output->position_x;
+      dest->y = output->position_y;
+      dest->width = mode->horizontal_resolution;
+      dest->height = mode->vertical_resolution;
+    }
+  else
+    {
+      *dest = {0, 0, 0, 0};
+    }
 }
 
 static void